package com.ai.study.dashscope.utils;

import com.alibaba.nacos.shaded.javax.annotation.Nullable;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

/**
 * 配置文件读取工具类
 */
@Slf4j
@Configuration
public class PropertyConfigureUtil implements EnvironmentAware {
	private static Environment environment;

	/**
	 * 获取环境变量
	 * @param environment 环境变量，包含配置文件所有属性
	 */
	@Override
	public void setEnvironment(Environment environment) {
		PropertyConfigureUtil.environment = environment;
	}

	/**
	 * 根据key获取对应value
	 * @param key key
	 * @return value
	 */
	public static String getProperty(String key) {
		return environment.getProperty(key);
	}

	/**
	 * 判断是否包含某个属性
	 * @param key key
	 * @return true:包含  false:不包含
	 */
	public static boolean containsProperty(String key){
		return environment.containsProperty(key);
	}

	/**
	 * 根据key获取对应value，如果没有，则使用默认值
	 * @param key key
	 * @param defaultValue 默认值
	 * @return value
	 */
	public static String getProperty(String key, String defaultValue){
		return environment.getProperty(key,defaultValue);
	}

	/**
	 * 根据key获取指定类型value
	 * @param key  key
	 * @param targetType 指定类型
	 * @param <T> 类型
	 * @return  值
	 */
	@Nullable
	public static <T> T getProperty(String key, Class<T> targetType){
		return environment.getProperty(key,targetType);
	}

	/**
	 * 根据key获取指定类型value，如果没有，使用默认值
	 * @param key key
	 * @param targetType 指定类型
	 * @param defaultValue 默认值
	 * @param <T> 类型
	 * @return value
	 */
	public static <T> T getProperty(String key, Class<T> targetType, T defaultValue){
		return environment.getProperty(key, targetType, defaultValue);
	}

	/**
	 * 根据key获取必须的某个字段，如果不存在，则抛异常
	 * @param key key
	 * @return value
	 * @throws IllegalStateException 没有key，抛异常
	 */
	public static String getRequiredProperty(String key) throws IllegalStateException {
		return environment.getRequiredProperty(key);
	}
}